import router from './router'
import store from './store'
// 进度条的库
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
// 白名单数组
const whiteArr = ['/login', '/404']
// 前置路由守卫
router.beforeEach(async(to, from, next) => {
  // 01-在路由跳转前开启进度条
  NProgress.start()
  // 保存变量,判断是否有token
  const hasToken = store.getters.token

  if (hasToken) {
    if (to.path === '/login') {
      // 如果有token,且去登录页的话重定向到主页
      next('/')
      // 每次跳转后记得触发进度条关闭，防止页面卡顿
      NProgress.done()
      // 每次记得结束后续代码
      return
    }

    if (!store.state.user.userInfo.userId) {
      try {
        await store.dispatch('user/getUserInfo')
      } catch (err) {
        // token失效之类的异常处理
        await store.dispatch('user/resetToken')
        next('/login')
        NProgress.done()
        return
      }
    }

    next()
  } else {
    // 如果在白名单数组中那么放行跳转next()
    if (whiteArr.includes(to.path)) {
      next()
    } else {
      // 否则跳转登录
      next('/login')
      // 关闭进度条
      NProgress.done()
      // 结束后续代码
      return
    }
  }
})
// 后置路由首位    在路由跳转完毕触发的结束进度条函数
router.afterEach(() => {
  // 关闭进度条
  NProgress.done()
})
